#!groovy
pipeline {
    agent any  // 使用任意可用的构建节点

    environment {
        GITURL = 'https://gitee.com/apple-Teawine/springboot-demo.git'   // Git 仓库地址
        SERVER = '10.0.0.10'                                              // 目标服务器 SSH 名称
        REMOTEDIR = '/test'                                               // 目标服务器上传目录
        SOURCE_FILE = 'target/springboot-demo-0.1.jar'                    // 构建后Jar文件
        PREFIX = 'target'                                                 // 上传时移除的路径前缀
        INIT_SCRIPT = 'springboot-demo.sh'                                // 启动脚本名称
        COMPLETE_EXEC_SHELL = '/data/test/springboot-demo.sh restart'   // 应用启动命令
    }

    tools {
        maven "mvn"  // Maven工具名称（与Jenkins全局配置一致）
        jdk 'jdk8'   // JDK工具名称（与Jenkins全局配置一致）
    }

    stages {
        stage('打印环境变量') {
            steps {
                sh 'printenv'  // 打印所有环境变量
            }
        }

        stage('编译代码') {
            steps {
                sh 'mvn clean package -Dmaven.test.skip=true'  // 跳过测试打包项目
            }
        }

        stage('应用分发') {
            steps {
                sshPublisher(
                    publishers: [
                        // 上传构建生成的Jar包
                        sshPublisherDesc(
                            configName: env.SERVER,  // SSH服务器名称
                            transfers: [
                                sshTransfer(
                                    execCommand: '',  // 不执行任何命令，仅上传文件
                                    execTimeout: 120000,
                                    flatten: false,  // 保留目录结构
                                    remoteDirectory: env.REMOTEDIR,  // 上传目标目录
                                    removePrefix: env.PREFIX,  // 去除前缀
                                    sourceFiles: env.SOURCE_FILE  // 要上传的文件
                                )
                            ]
                        ),
                        // 上传启动脚本并部署到 /etc/init.d
                        sshPublisherDesc(
                            configName: env.SERVER,  // SSH服务器名称
                            transfers: [
                                sshTransfer(
                                    sourceFiles: env.INIT_SCRIPT,  // 要上传的脚本
                                    remoteDirectory: env.REMOTEDIR,  // 上传到/test目录
                                    flatten: true,  // 不保留本地路径结构
                                    execCommand: '''  // 多行字符串执行脚本部署
                                        cp /data/test/springboot-demo.sh /etc/init.d/
                                        chmod +x /etc/init.d/springboot-demo.sh
                                        /etc/init.d/springboot-demo.sh restart
                                    ''',
                                    execTimeout: 120000
                                )
                            ]
                        )
                    ]
                )
            }
        }
    }
}